package Day010_排序算法_异常.demo06_异常注意事项;

import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * @Author：pengzhilin
 * @Date: 2020/4/27 14:17
 */
public class Test {
    public static void main(String[] args) {
        /*
            异常处理的注意事项:
                - 运行时异常被抛出可以不处理。即不捕获也不声明抛出。
                - 如果父类的方法抛出了多个异常,子类覆盖(重写)父类方法时,只能抛出相同的异常或者是他的子集。
                - 父类方法没有抛出异常，子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常，只能捕获处理，不能声明抛出
                - 在try/catch后可以追加finally代码块，其中的代码一定会被执行，通常用于资源回收。
                - 当多异常分别处理时，捕获处理，前边的类不能是后边类的父类
                - 当多异常分别处理时，声明处理，可以直接声明父类异常
                - 多个异常使用捕获又该如何处理呢？
                  1. 多个异常分别处理。
                  2. 多个异常一次捕获，多次处理。
                  3. 多个异常一次捕获一次处理。  掌握
         */
        method1();
        System.out.println("结束了");
    }

    public static void method1() {
        System.out.println(1 / 0);// 运行异常
    }

    // 当多异常分别处理时，捕获处理，前边的类不能是后边类的父类
    // 多个异常一次捕获一次处理。
    public static void method2(int num) {
        try {
            if (num == 10) {
                // 会产生一个异常
                throw new FileNotFoundException("文件找不到异常");
            } else {
                // 会产生一个异常
                throw new IOException("IO异常");
            }
        } catch (IOException e2) {

        }/*catch (FileNotFoundException e1){// FileNotFoundException 继承 IOException
              // 编译报错
        }*/
    }

    // 当多异常分别处理时，声明处理，可以直接声明父类异常
    public static void method3(int num) throws Exception{
        if (num == 10) {
            // 会产生一个异常
            throw new FileNotFoundException("文件找不到异常");
        } else {
            // 会产生一个异常
            throw new IOException("IO异常");
        }
    }

    // 多个异常分别处理。
    public static void method4(int num) {
        if (num == 10) {
            // 会产生一个异常
            try {
                throw new FileNotFoundException("文件找不到异常");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        } else {
            // 会产生一个异常
            try {
                throw new IOException("IO异常");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    // 多个异常一次捕获，多次处理。
    public static void method5(int num) {
        // 选中代码,ctrl+alt+t --->选中try...catch
        try {
            if (num == 10) {
                // 会产生一个异常
                throw new FileNotFoundException("文件找不到异常");
            } else {
                // 会产生一个异常
                throw new IOException("IO异常");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}
